package org.water.sys.service;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.stereotype.Service;
import org.water.base.service.BaseService;
import org.water.base.support.BeanQuery;
import org.water.sys.entity.SysDictType;
import org.water.sys.entity.SysDictValue;
import org.water.sys.repository.DictTypeDao;
import org.water.sys.repository.DictValueDao;
/**
 * 字典服务
 * @author qzy
 *
 */
@Service
public class DictService extends BaseService<SysDictType, String> {

	@Autowired
	private DictValueDao dictValueDao;
	@Autowired
	private DictTypeDao dictTypeDao;
	/**
	 * 查询字典类型
	 * @param name
	 * @param pageIndex
	 * @param pageSize
	 * @return
	 */
	public Page<SysDictType> findDictType(String name,int pageIndex,int pageSize)
	{
		Page<SysDictType> dts=null;
		String[] fields={"code","name"};
		BeanQuery<SysDictType> beanqry=this.baseRespository.createBeanQuery(SysDictType.class);
		beanqry.orLike(fields, name);
		dts=beanqry.page(pageIndex, pageSize);
		return dts;
	}
	/**
	 * 根据字典类型编码查询
	 * @param code
	 * @return
	 */
	@Cacheable(value="sysDictCache",key="dictTypeCode+#code")
	public SysDictType findDictTypeOne(String code)
	{
		return dictTypeDao.findByCode(code);
	}
	/**
	 * 根据字典类型查询字典值
	 * @param typeId 字典类型ID
	 * @return
	 */
	@Cacheable(value="sysDictCache",key="dictTypeId+#typeId")
	public List<SysDictValue> findByDictTypeId(String typeId)
	{
		return dictValueDao.findByDictTypeId(typeId);
	}
	/**
	 * 根据字典类型查询字典值
	 * @param typeCode 字典类型编码
	 * @return
	 */
	@Cacheable(value="sysDictCache",key="dictTypeCode+#typeCode+_value")
	public List<SysDictValue> findByDictTypeCode(String typeCode)
	{
		return dictValueDao.findByTypeCode(typeCode);
	}
	/**
	 * 查询字典值
	 * @param id
	 * @return
	 */
	public SysDictValue findDictValue(String id )
	{
		return dictValueDao.findOne(id);
	}
	/**
	 * 根据字典类型编码和值编码查询
	 * @param typeCode
	 * @param valueCode
	 * @return
	 */
	@Cacheable(value="sysDictCache",key="dictTypeValue+#typeCode+_value")
	public SysDictValue findByTypeCodeAndValueCode(String typeCode,String valueCode)
	{
	   return dictValueDao.findByTypeCodeAndValueCode(typeCode, valueCode);	
	}
	/**
	 * 保存字典值
	 * @param dictValue
	 */
	public void save(SysDictValue dictValue) {
		dictValueDao.save(dictValue);
	}
	/**
	 * 删除字典值
	 * @param valueId
	 */
	public void delDictValue(String valueId)
	{
		dictValueDao.delete(valueId);
	}
}
